// SDK配置接口
export interface SDKConfig {
  // 上报服务器地址
  reportUrl: string;
  // 应用标识
  appId: string;
  // 应用版本
  appVersion?: string;
  // 用户标识
  userId?: string;
  // 是否启用控制台日志
  enableConsole?: boolean;
  // 是否启用性能监控
  enablePerformance?: boolean;
  // 是否启用用户行为追踪
  enableBehavior?: boolean;
  // 采样率 (0-1)
  sampleRate?: number;
  // 最大缓存数量
  maxCacheSize?: number;
  // 上报间隔时间(ms)
  reportInterval?: number;
  // 自定义标签
  tags?: Record<string, any>;
}

// 错误信息接口
export interface ErrorInfo {
  // 错误类型
  type: 'js' | 'promise' | 'resource' | 'http' | 'custom';
  // 错误消息
  message: string;
  // 错误堆栈
  stack?: string;
  // 错误文件名
  filename?: string;
  // 错误行号
  lineno?: number;
  // 错误列号
  colno?: number;
  // 错误时间戳
  timestamp: number;
  // 页面URL
  url: string;
  // 用户代理
  userAgent: string;
  // 自定义数据
  extra?: Record<string, any>;
}

// 性能信息接口
export interface PerformanceInfo {
  // 页面加载时间
  loadTime: number;
  // DOM内容加载时间
  domContentLoadedTime: number;
  // 首次内容绘制时间
  fcp?: number;
  // 最大内容绘制时间
  lcp?: number;
  // 首次输入延迟
  fid?: number;
  // 累积布局偏移
  cls?: number;
  // 时间戳
  timestamp: number;
}

// 用户行为信息接口
export interface BehaviorInfo {
  // 行为类型
  type: 'click' | 'scroll' | 'input' | 'navigation' | 'custom';
  // 元素选择器
  selector?: string;
  // 元素文本内容
  text?: string;
  // 页面URL
  url: string;
  // 时间戳
  timestamp: number;
  // 自定义数据
  extra?: Record<string, any>;
}

// 上报数据接口
export interface ReportData {
  // 应用标识
  appId: string;
  // 应用版本
  appVersion?: string;
  // 用户标识
  userId?: string;
  // 会话标识
  sessionId: string;
  // 错误信息列表
  errors?: ErrorInfo[];
  // 性能信息
  performance?: PerformanceInfo;
  // 用户行为列表
  behaviors?: BehaviorInfo[];
  // 自定义标签
  tags?: Record<string, any>;
  // 上报时间戳
  timestamp: number;
}

// 事件监听器接口
export interface EventListener {
  (data: ErrorInfo | PerformanceInfo | BehaviorInfo): void;
}

// SDK实例接口
export interface ErrorMonitorSDK {
  // 初始化SDK
  init(config: SDKConfig): void;
  // 手动上报错误
  reportError(error: Error | string, extra?: Record<string, any>): void;
  // 手动上报性能信息
  reportPerformance(performance: PerformanceInfo): void;
  // 手动上报用户行为
  reportBehavior(behavior: BehaviorInfo): void;
  // 添加事件监听器
  on(event: 'error' | 'performance' | 'behavior', listener: EventListener): void;
  // 移除事件监听器
  off(event: 'error' | 'performance' | 'behavior', listener: EventListener): void;
  // 销毁SDK
  destroy(): void;
} 